package com.youkol.iot.demo.emqx.auth;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

/**
 * <ul>
 * <li>参考文档：<a href="https://docs.emqx.cn/cn/broker/latest/advanced/auth-http.html">认证</a>
 * <li>参考文档：<a href="https://docs.emqx.cn/cn/broker/latest/advanced/acl-http.html">发布订阅ACL</a>
 * </ul>
 * @author jackiea
 */
@RestController
public class EmqxAuthController {

    @PostMapping(value="/superuser")
    public ResponseEntity<String> checkSuperuser(@RequestBody String entity) {
        return ResponseEntity.notFound().build();
    }


    /**
     * <p>EMQ X 在设备连接事件中使用当前客户端相关信息作为参数，向用户自定义的认证服务发起请求查询权限，
     * 通过返回的 HTTP 响应状态码 (HTTP statusCode) 来处理认证请求。
     * <ul>
     * <li>认证失败：API 返回 4xx 状态码
     * <li>认证成功：API 返回 200 状态码
     * <li>忽略认证：API 返回 200 状态码且消息体 ignore
     * </ul>
     * @param entity
     */
    @PostMapping(value="/auth")
    public ResponseEntity<String> doMqttAuth(@RequestBody String entity) {
        return ResponseEntity.notFound().build();
    }

    /**
     * <p>EMQ X 在设备发布、订阅事件中使用当前客户端相关信息作为参数，向用户自定义的认证服务发起请求权限，
     * 通过返回的 HTTP 响应状态码 (HTTP statusCode) 来处理 ACL 授权请求。
     * <ul>
     * <li>无权限：API 返回 4xx 状态码
     * <li>授权成功：API 返回 200 状态码
     * <li>忽略授权：API 返回 200 状态码且消息体 ignore
     * </ul>
     *
     * @param entity
     */
    @PostMapping(value="/acl")
    public ResponseEntity<String> doMqttAcl(@RequestBody String entity) {
        return ResponseEntity.notFound().build();
    }

}
